home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / proasm / routines / amigaguideasync.r < prev    next >
Text File  |  1994-03-19  |  5KB  |  225 lines

  1.  
  2. ;---;  amigaguideasync.r  ;----------------------------------------------------
  3. *
  4. *    ****    ASYNCHRONEOUS AMIGAGUIDE SUPPORT    ****
  5. *
  6. *    Author        Stefan Walter
  7. *    Version        1.01
  8. *    Last Revision    09.03.94
  9. *    Identifier    aag_defined
  10. *       Prefix        aag_    (Async AmigaGuide)
  11. *                 ¯     ¯    ¯
  12. *    Functions    StartAsyncAmigaGuide, SendAGCmd, EndAsyncAmigaGuide,
  13. *            AsyncAGHandle
  14. *
  15. ;------------------------------------------------------------------------------
  16. * HOW TO USE:  Call StartAsyncAmigaGuide when you need help for the first time,
  17. *              Add the resulting signal to your set of signal bits you wait on,
  18. *              call AsyncAGHandle when the signal has been received.  Use 
  19. *              SendAGCmd to send commands like 'LINK <node>' or 'CLOSE'.  Add 
  20. *              EndAsyncAmigaGuide to your cleanup code.
  21. ;------------------------------------------------------------------------------
  22.  
  23.     IFND    aag_defined
  24. aag_defined    SET    1
  25.  
  26. ;------------------
  27. aag_oldbase    EQU __BASE
  28.     base    aag_base
  29. aag_base:
  30.  
  31. ;------------------
  32.  
  33.  
  34. ;------------------------------------------------------------------------------
  35. *
  36. * StartAsyncAmigaGuide    Start AmigaGuide in background. The window does not yet
  37. *             open.
  38. *
  39. * INPUT:    a0:    File name.
  40. *        a1:    Title.
  41. *
  42. * RESULT:    d0:    Signal bit mask or 0 if error.
  43. *               ccr:    On d0.
  44. *
  45. ;------------------------------------------------------------------------------
  46.     IFD    xxx_StartAsyncAmigaGuide
  47. StartAsyncAmigaGuide:
  48.     movem.l    d1-a6,-(sp)
  49.     lea    aag_base(pc),a4
  50.         move.l  aag_handle(a4),d0
  51.     bne    .exit
  52.     lea    aag_nag(pc),a5
  53.     move.l    a0,nag_Name(a5)
  54.     move.l    a1,nag_BaseName(a5)
  55.     moveq    #%10,d0
  56.     move.l    d0,nag_Flags(a5)
  57.     clr.l    nag_Client(a5)
  58.     clr.l    nag_Lock(a5)
  59.  
  60.     move.l    aag_agbase(pc),d0
  61.     bne.s    .glib                ;available
  62.     move.l    4.w,a6
  63.     lea    aag_agname(pc),a1
  64.     jsr    -408(a6)            ;OldOpenLibrary()
  65.     move.l    d0,aag_agbase(a4)
  66.     beq.s    .exit
  67.  
  68. .glib:    move.l    DosBase(pc),a6
  69.     move.l    cws_homedir(pc),d1
  70.     jsr    -126(a6)
  71.     move.l    d0,d6
  72.  
  73.     move.l    aag_agbase(pc),a6
  74.     move.l    a5,a0
  75.     moveq    #0,d0
  76.     jsr    -60(a6)            ;OpenAmigaGuideAsyncA()
  77.         move.l  d0,aag_handle(a4)
  78.  
  79.     move.l    DosBase(pc),a6
  80.     move.l    d6,d1
  81.     jsr    -126(a6)
  82.  
  83.         move.l     aag_handle(a4),d0
  84.         beq.s   .exit
  85.  
  86.     move.l    aag_agbase(pc),a6
  87.         move.l  d0,a0
  88.         jsr     -72(a6)                 ;AmigaGuideSignal()
  89.     move.l    d0,aag_signal(a4)
  90.  
  91. .wait:    move.l    aag_signal(a4),d0
  92.     move.l    4.w,a6
  93.     jsr    -318(a6)        ;Wait()
  94.     CALL_    AsyncAGHandle
  95.     sub.l    #ActiveToolID,d0
  96.     beq.s    .exit
  97.     subq.l    #ToolStatusID-ActiveToolID,d0
  98.     bne.s    .wait
  99.  
  100. .exit:  move.l    aag_signal(a4),d0
  101.     movem.l    (sp)+,d1-a6
  102.     rts
  103.  
  104.     ENDC
  105.  
  106.  
  107.  
  108. ;------------------------------------------------------------------------------
  109. *
  110. * EndAsyncAmigaGuide    Terminate asynchroneous AmigaGuide. Safe to use if
  111. *            not installed.
  112. *
  113. ;------------------------------------------------------------------------------
  114.     IFD    xxx_EndAsyncAmigaGuide
  115. EndAsyncAmigaGuide:
  116.     movem.l    d0-a6,-(sp)
  117.     lea    aag_base(pc),a4
  118.  
  119.     move.l    aag_handle(a4),d0
  120.     beq.s    .c1
  121.     move.l    d0,a0
  122.     move.l    aag_agbase(pc),a6
  123.     jsr    -66(a6)            ;CloseAmigaGuideA()
  124.     clr.l    aag_handle(a4)
  125.  
  126. .c1:    move.l    aag_agbase(a4),d0
  127.     beq.s    .c2
  128.     move.l    d0,a1
  129.     move.l    4.w,a6
  130.     jsr    -414(a6)
  131.     clr.l    aag_agbase(a4)
  132.  
  133. .c2:    movem.l    (sp)+,d0-a6
  134.     rts
  135.  
  136.     ENDC
  137.  
  138.  
  139.  
  140. ;------------------------------------------------------------------------------
  141. *
  142. * SendAGCmd    Send a command string to the AmigaGuide window. A call
  143. *        to OpenAmigaGuide must already be done earlier.
  144. *
  145. * INPUT:    a0:    Text, 0 terminated.
  146. *
  147. * RESULT:    d0:    Result.
  148. *
  149. ;------------------------------------------------------------------------------
  150.     IFD    xxx_SendAGCmd
  151. SendAGCmd:
  152.     movem.l    d1-a6,-(sp)
  153.     move.l    aag_handle(pc),d0
  154.     beq.s    .out
  155.     exg.l    a0,d0
  156.  
  157.     move.l    aag_agbase(pc),a6
  158.     moveq    #0,d1
  159.     jsr    -102(a6)            ;SendAmigaGuideCmdA()
  160.  
  161. .out:    tst.l    d0
  162.     movem.l    (sp)+,d1-a6
  163.     rts
  164.  
  165.     ENDC
  166.  
  167.  
  168.  
  169. ;------------------------------------------------------------------------------
  170. *
  171. * AsyncAGHandle    Deal with messages from AMigaGuide.
  172. *
  173. * RESULT:    d0:    0.
  174. *
  175. ;------------------------------------------------------------------------------
  176.     IFD    xxx_AsyncAGHandle
  177. AsyncAGHandle:
  178.     movem.l    d1-a6,-(sp)
  179.     moveq    #0,d5
  180.     move.l    aag_handle(pc),d7
  181.     beq.s    .out
  182.     
  183. .loop:    move.l    aag_agbase(pc),a6
  184.     move.l    d7,a0
  185.         jsr    -78(a6)            ;GetAmigaGuideMsg()
  186.     tst.l    d0
  187.     beq.s    .out
  188.     move.l    d0,a0
  189.     move.l    20(a0),d5
  190.     jsr    -84(a6)            ;ReplyAmigaGuideMsg()
  191.     bra.s    .loop
  192.  
  193. .out:    move.l    d5,d0
  194.     movem.l    (sp)+,d1-a6
  195.     rts
  196.  
  197.     ENDC
  198.  
  199.  
  200.  
  201. ;--------------------------------------------------------------------
  202.  
  203. ;------------------
  204. aag_nag:    ds.b    NewAmigaGuide_SIZEOF,0
  205. aag_handle:    dc.l    0
  206. aag_agbase:    dc.l    0
  207. aag_signal:    dc.l    0
  208.  
  209. aag_agname:    dc.b    "amigaguide.library",0
  210.         even
  211.  
  212.  
  213. ;------------------
  214.  
  215. ;--------------------------------------------------------------------
  216.  
  217.     base    aag_oldbase
  218.  
  219. ;------------------
  220.  
  221.     ENDIF
  222.  
  223.     end
  224.  
  225.